Шаг 1. Установка Certbot на Debian 12
Debian 12 содержит certbot в стандартных репозиториях, но рекомендую поставить snap-версию, так как она всегда актуальна.
1.1 Установка snapd (если ещё нет)
sudo apt update
sudo apt install snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap
Перезайдите в терминал или выполните:
source /etc/profile
1.2 Установка certbot через snap
Удалите старый certbot, если он установлен:
sudo apt remove certbot
Установите certbot в snap:
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Шаг 2. Получение сертификата
Пример для standalone:
sudo certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com
Для nginx или apache используйте:
sudo certbot --nginx
или
sudo certbot --apache
Важно про автоперезапуск сервисов
Когда certbot обновляет сертификаты, иногда необходимо перезапустить сервисы, чтобы они «подхватили» новые файлы.
-
При использовании плагинов
--apacheили--nginxcertbot самостоятельно перезапускает веб-сервер. Дополнительные настройки для этого не нужны. -
Если же используется standalone режим (
certbot certonly --standalone), certbot не управляет перезапуском сервисов. В таком случае необходимо настроить вручную скрипты для перезапуска тех сервисов, которым нужен свежий сертификат (приложения, прокси и др.). Об этом — следующий раздел вашей статьи.
Шаг 3. Скрипты для перезапуска сервисов
Создаём скрипты:
nano /usr/local/bin/restart_services.sh
Вставляем:
#!/bin/bash
systemctl restart myapp.service
systemctl restart myblog.service
systemctl restart myeditor.service
systemctl restart games.service
systemctl restart site.service
nano /usr/local/bin/restart_all_services.sh
Вставляем:
#!/bin/bash
/usr/local/bin/restart_services.sh
systemctl restart torrserver.service
systemctl restart x-ui.service
Назначаем права на исполнение:
sudo chmod +x /usr/local/bin/restart_services.sh
sudo chmod +x /usr/local/bin/restart_all_services.sh
Как определить имя сервиса certbot
Чтобы точно узнать имя сервиса certbot в вашей системе, выполните команду:
systemctl list-units | grep certbot
По результату определите, какое имя сервиса использовать в следующем шаге:
- если в выводе есть snap.certbot.certbot.service, значит certbot установлен через snap — используйте это имя;
- если есть certbot.service, значит стандартная установка — используйте это имя.
Шаг 4. Настройка systemd override для certbot
Выполните команду, соответствующую варианту установки certbot.
Если certbot установлен через snap: выполните команду:
sudo systemctl edit snap.certbot.certbot.service
Если certbot установлен стандартно (не через snap): выполните команду:
sudo systemctl edit certbot.service
Вставляем:
[Service]
ExecStartPost=/usr/local/bin/restart_all_services.sh
Сохраняем и выходим.
Шаг 5. Перезагружаем systemd
sudo systemctl daemon-reload
Шаг 6. Проверка и тестирование
sudo certbot renew --dry-run
Если видите:
Congratulations, all simulated renewals succeeded:
...
значит всё настроено правильно.
Как проверить SSL-сертификат
После установки и настройки сертификата важно убедиться, что он корректно установлен и действителен. Это можно сделать двумя способами: через онлайн-сервисы и прямо на VPS в консоли.
Онлайн проверка сертификата
Используйте бесплатные и удобные сервисы для проверки:
- SSL Labs — детальный анализ сертификата и безопасности сайта.
- SSL Shopper — быстрый просмотр информации о сертификате.
Достаточно ввести доменное имя, например server.tonicman.ru, и запустить проверку. В выдаче увидите данные о центре сертификации, сроках действия, поддерживаемых протоколах и другие параметры безопасности.
Проверка сертификата через консоль VPS
На своем сервере с Linux можно использовать утилиту openssl для диагностики сертификата.
- Посмотреть цепочку сертификатов, установленных на сервере:
openssl s_client -connect server.tonicman.ru:443 -showcerts
- Узнать даты начала и окончания действия сертификата:
echo | openssl s_client -connect server.tonicman.ru:443 2>/dev/null | openssl x509 -noout -dates
- Сохранить сертификат в файл для детального изучения:
openssl s_client -connect server.tonicman.ru:443 -showcerts </dev/null 2>/dev/null | openssl x509 -outform PEM > cert.pem
- Просмотреть подробную информацию о сертификате из файла:
openssl x509 -in cert.pem -noout -text
Эти команды помогут контролировать актуальность и корректную работу SSL-сертификата прямо из вашей консоли.
Переход на работу через Nginx (Reverse Proxy)
Если вы решили использовать Nginx как единую точку входа (чтобы за SSL отвечал только он), выполните следующие действия по очистке и перенастройке:
1. Что удалить в настройках приложений
Чтобы приложения (бекенды, редакторы, игры) перестали сами пытаться подгружать SSL-сертификаты, нужно очистить их файлы запуска:
- Откройте юнит-файл каждого такого сервиса:
sudo nano /etc/systemd/system/имя_сервиса.service. - В строке
ExecStartудалите флаги, указывающие на SSL (например:--ssl-keyfile ...и--ssl-certfile ...). - Сохраните файл и примените изменения командой:
sudo systemctl daemon-reload.
2. Изменение скрипта перезапуска под Nginx
Теперь, когда приложения работают через прокси, им не требуется перезапуск при обновлении сертификатов. Достаточно перезагрузить сам Nginx.
Отредактируйте скрипт:
nano /usr/local/bin/restart_services.sh
Удалите старое содержимое и вставьте нужный вам вариант:
Вариант только для Nginx:
#!/bin/bash
systemctl restart nginx
Вариант для Nginx + 3x-ui (если используете оба):
#!/bin/bash
systemctl restart x-ui
systemctl restart nginx
systemctl restart torrserver.service
3. Удаление лишних скриптов
Если вы ранее создавали промежуточный скрипт restart_all_services.sh и он вам больше не нужен, его можно удалить:
sudo rm /usr/local/bin/restart_all_services.sh
В этом случае в Шаге 4 (systemd override) убедитесь, что в параметре ExecStartPost указан прямой путь к основному скрипту: /usr/local/bin/restart_services.sh.
Для проверки того, что автоматическое продление и перезапуск сервисов (включая работу скрипта) настроены верно, существует встроенная функция тестирования Certbot.
Шаг 7. Проверка автоматического продления
Чтобы убедиться, что система не только обновит сертификат, но и корректно выполнит ваши скрипты перезагрузки, выполните команду «сухого запуска»:
sudo certbot renew --dry-run
На что обратить внимание в выводе:
- Успех продления: Вы должны увидеть сообщение
Congratulations, all simulated renewals succeeded. Это значит, что Certbot успешно связывается с серверами Let's Encrypt. - Работа ваших скриптов: Сразу после выполнения этой команды проверьте статус ваших сервисов (Nginx или других приложений из скрипта) командой:
systemctl status nginx
В строке Active вы увидите время запуска. Если автоматизация сработала, то время запуска должно совпадать с моментом выполнения команды renew --dry-run (несколько секунд назад). Это подтверждает, что ExecStartPost успешно вызывает ваш скрипт.
Если команда выдаёт ошибку:
- Проверьте порты: Для режима
--standaloneдолжен быть открыт 80 порт. Если у вас запущен Nginx, то для проверки (dry-run) его нужно либо остановить, либо использовать метод--nginx. - Проверьте пути: Убедитесь, что в Шаге 4 указан верный путь к скрипту и на сам скрипт даны права на исполнение (
chmod +x).
Теперь вы можете быть уверены, что через 60-90 дней сервер обновит всё самостоятельно без вашего участия.
Итог
Теперь на Debian 12 certbot установлен и при обновлении сертификата автоматически перезапускает ваши сервисы через заданные скрипты.